
grant select on EMPLOYEE to PUBLIC;

create user THUMPER
identified by RABBIT
default tablespace USERS
temporary tablespace TEMP;

alter user THUMPER
quota 100M on USERS;

drop user THUMPER cascade;

create role ACCOUNT_CREATOR;
grant CREATE SESSION, CREATE USER, ALTER USER 
   to ACCOUNT_CREATOR;

alter user THUMPER default role NONE;

alter user THUMPER default role CONNECT;

alter user THUMPER default role all except ACCOUNT_CREATOR;

alter profile DEFAULT
idle_time 60;

create profile LIMITED_PROFILE limit
FAILED_LOGIN_ATTEMPTS 5;

create user JANE identified by EYRE
profile LIMITED_PROFILE;

grant CREATE SESSION to JANE;

alter user JANE account unlock;

alter user JANE account lock;

alter profile LIMITED_PROFILE limit
PASSWORD_LIFE_TIME 30;

alter user jane password expire;

alter profile LIMITED_PROFILE limit
PASSWORD_REUSE_MAX 3
PASSWORD_REUSE_TIME UNLIMITED;

alter user JANE identified by austen;

alter user JANE identified by eyre;

Rem utlpwdmg.sql
Rem
Rem  Copyright (c) Oracle Corporation 1996. Wszelkie prawa 
Rem  zastrzeone.
Rem
Rem    NAWA
Rem      utlpwdmg.sql - skrypt dla limitw zasobw domylnego hasa
Rem
Rem    OPIS
Rem      To jest skrypt do uaktywnienia opcji zarzdzania hasem   
Rem      przez ustawienie limitw zasobw domylnego hasa.
Rem
Rem    UWAGI
Rem      Ten plik zawiera funkcj minimalnego sprawdzania zoonoci 
Rem      hasa. To jest raczej prbna funkcja, ktr uytkownik moe 
Rem      uy, aby opracowa funkcj dla rzeczywistych sprawdze
Rem      zoonoci, ktre uytkownik chciaby wykona dla nowego
Rem      hasa.
Rem
Rem    asurpur     12/12/96  Zmiana nazwy funkcji_weryfikacji_hasa
-- Ten skrypt ustawia parametry zasobw domylnego hasa. 
-- Aby uaktywni wasnoci hasa naley ten skrypt uruchomi. 
-- Domylne parametry zasobw mog by zmienione wedug potrzeb. 
-- Dostarczona jest rwnie funkcja sprawdzenia zoonoci domylnego -- hasa. Ta funkcja wykonuje minimalne sprawdzenia zoonoci, takie -- jak minimaln dugo hasa, czy haso nie jest takie samo jak
-- nazwa uytkownika itd. Uytkownik moe t funkcj wzbogaci wedug   
-- swoich potrzeb. Ta funkcja musi by utworzona w schemacie SYS. 
-- Przed uruchomieniem tego skryptu naley wykona poczenie 
-- sys/<haso> jako sysdba. 

CREATE OR REPLACE FUNCTION verify_function
(username varchar2,
  password varchar2,
  old_password varchar2)
  RETURN boolean IS 
   n boolean;
   m integer;
   differ integer;
   isdigit boolean;
   ischar  boolean;
   ispunct boolean;
   digitarray varchar2(20);
   punctarray varchar2(25);
   chararray varchar2(52);

BEGIN 
   digitarray:= '0123456789';
   chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
   punctarray:='!"#$%&()''*+,-/:;<=>?_';

   -- Sprawd, czy haso jest takie samo jak nazwa uytkownika
   IF password = username THEN
     raise_application_error(-20001, 'Haso takie samo jak nazwa         
                             uytkownika');
   END IF;

   -- Sprawd wystpowanie minimalnej dugoci hasa
   IF length(password) < 4 THEN
      raise_application_error(-20002,'Dugo hasa mniejsza ni  4');
   END IF;

   -- Sprawd, czy haso nie jest za proste. Mona poda sownik 
   -- wyrazw za pomoc ktrego modu sprawdzajcy nie pozwoli na 
   -- zastosowanie sw, ktre s zbyt proste na haso. 
IF password IN ('witam','haso','oracle','komputer',abcd')THEN
      raise_application_error(-20002, 'Haso za proste');
   END IF;

   -- Sprawd, czy haso zawiera przynajmniej jedn liter, jedn 
   -- cyfr i jeden znak interpunkcyjny.
   -- 1. Sprawd wystpowanie cyfry
   isdigit:=FALSE;
   m := length(password);
   FOR i IN 1..10 LOOP 
      FOR j IN 1..m LOOP 
         IF substr(password,j,1) = substr(digitarray,i,1) THEN
            isdigit:=TRUE;
             GOTO findchar;
         END IF;
      END LOOP;
   END LOOP;
   IF isdigit = FALSE THEN
      raise_application_error(-20003, 'Haso powinno zawiera przynajmniej jedn liter, jedn cyfr i jeden znak interpunkcyjny');
   END IF;
   -- 2. Sprawd wystpowanie litery
   <<findchar>>
   ischar:=FALSE;
   FOR i IN 1..length(chararray) LOOP
      FOR j IN 1..m LOOP
         IF substr(password,j,1) = substr(chararray,i,1) THEN
            ischar:=TRUE;
             GOTO findpunct;
         END IF;
      END LOOP;
   END LOOP;
   IF ischar = FALSE THEN
      raise_application_error(-20003, 'Haso powinno zawiera przynajmniej jedn liter, jedn cyfr i jeden znak interpunkcyjny');
   END IF;
   -- 3. Sprawd wystpowanie znaku interpunkcyjnego
   <<findpunct>>
   ispunct:=FALSE;
   FOR i IN 1..length(punctarray) LOOP
      FOR j IN 1..m LOOP
         IF substr(password,j,1) = substr(punctarray,i,1) THEN
            ispunct:=TRUE;
             GOTO endsearch;
         END IF;
      END LOOP;
   END LOOP;
   IF ispunct = FALSE THEN
      raise_application_error(-20003, 'Haso powinno zawiera przynajmniej jedn liter, jedn cyfr i jeden znak interpunkcyjny');
   END IF;

   <<endsearch>>
   -- Sprawd, czy haso rni si od poprzedniego hasa przynajmniej   
   -- 3 literami 
   IF old_password = '' THEN
      raise_application_error(-20004, 'Stare haso ma warto   
                              zerow');
   END IF;
   -- Wszystko jest w porzdku; return TRUE ;
   RETURN(TRUE);
   differ := length(old_password) - length(password);

   IF abs(differ) < 3 THEN
      IF length(password) < length(old_password) THEN
         m := length(password);
      ELSE
         m := length(old_password);
      END IF;
      differ := abs(differ);
      FOR i IN 1..m LOOP
          IF substr(password,i,1) != substr(old_password,i,1) THEN
             differ := differ + 1;
          END IF;
      END LOOP;
      IF differ < 3 THEN
          raise_application_error(-20004, 'Haso powinno rni si 
                                  przynajmniej 3 znakami');
      END IF;
   END IF;
   -- Wszystko jest w porzdku; return TRUE ;
   RETURN(TRUE);
END;
/

-- Ten skrypt zmienia parametry domylne dla opcji zarzdzania hasami
-- Password Management. To znaczy, e wszyscy uytkownicy w systemie 
-- bd mieli uaktywnion opcj zarzdzania hasami Password 
-- Management i bd mieli ustawione podane poniej wartoci, dopki 
-- dla uytkownika nie zostanie utworzony i przydzielony 
-- inny profil z parametrami o wartociach innych lub UNLIMITED. 

ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 60
PASSWORD_GRACE_TIME 10
PASSWORD_REUSE_TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1/1440
PASSWORD_VERIFY_FUNCTION verify_function;

alter profile DEFAULT limit
PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION;

create user OPS$FARMER
identified by HASO
default tablespace USERS
temporary tablespace TEMP;

create user OPS$FARMER
identified externally
default tablespace USERS
temporary tablespace TEMP;

revoke SYSDBA from George;

Create user THUMPER
Identified by RABBIT;

create role ACCOUNT_CREATOR identified by HELPDESK_ONLY;

alter role ACCOUNT_CREATOR not identified;

alter role MANAGER identified externally;

ora_local_manager_d:NONE:1:dora
ora_local_manager_d:NONE:1:dora,judy

grant select, update (Employee_Name, Address)
on EMPLOYEE to MCGREGOR
with grant option;

connect MCGREGOR/FARMER
grant select on THUMPER.EMPLOYEE to JFISHER; 

create role APPLICATION_USER;
grant CREATE SESSION to APPLICATION_USER;

create role DATA_ENTRY_CLERK;
grant select, insert on THUMPER.EMPLOYEE to DATA_ENTRY_CLERK;
grant select, insert on THUMPER.TIME_CARDS to DATA_ENTRY_CLERK;
grant select, insert on THUMPER.DEPARTMENT to DATA_ENTRY_CLERK;

grant APPLICATION_USER to DATA_ENTRY_CLERK;

grant DATA_ENTRY_CLERK to MCGREGOR;

grant DATA_ENTRY_CLERK to BPOTTER with admin option;

set role DATA_ENTRY_CLERK;

set role NONE;

revoke delete on EMPLOYEE from PETER;
revoke all on EMPLOYEE from MCGREGOR;

revoke ACCOUNT_CREATOR from HELPDESK;

drop user NAZWAKONTA cascade;

grant SELECT on EMPLOYEE to MCGREGOR with grant option;

revoke SELECT on EMPLOYEE from MCGREGOR;

select
      Role,             /*Nazwa roli*/
      Privilege,        /*Uprawnienie systemowe*/
      Admin_Option      /*Czy zostaa przyznana opcja admin?*/
 from ROLE_SYS_PRIVS;


select
      Grantee,           /*Odbiorca przyznania*/
      Owner,             /*Waciciel obiektu*/
      Table_Name,        /*Nazwa obiektu*/
      Grantor,           /*Uytkownik, ktry dokona przyznania*/
      Privilege,         /*Przyznane uprawnienie*/
      Grantable          /*Czy zostaa przyznana opcja admin?*/
 from DBA_TAB_PRIVS;


select
      DBA_ROLE_PRIVS.Grantee,        /*Odbiorca przyznania*/
      ROLE_TAB_PRIVS.Owner,          /*Waciciel obiektu*/
      ROLE_TAB_PRIVS.Table_Name,     /*Nazwa obiektu*/
      ROLE_TAB_PRIVS.Privilege,      /*Przyznane uprawnienie*/
      ROLE_TAB_PRIVS.Grantable       /*Czy zostaa przyznana opcja admin?*/
 from DBA_ROLE_PRIVS, ROLE_TAB_PRIVS
where DBA_ROLE_PRIVS.Granted_Role = ROLE_TAB_PRIVS.Role
  and DBA_ROLE_PRIVS.Grantee = 'nazwa uytkownika';


select
      Username,         /*Nazwa uytkownika*/
      Password          /*Zaszyfrowane haso*/
from DBA_USERS
where Username in ('MCGREGOR','THUMPER','OPS$FARMER');

create user MCGREGOR identified by VALUES '1A2DD3CCEE354DFA';

alter user OPS$FARMER identified by VALUES 'no way';

select
select
      Username,         /*Nazwa uytkownika*/
      Password          /*Zaszyfrowane haso*/
from DBA_USERS
where Username in ('MCGREGOR','THUMPER','OPS$FARMER');

REM*  become_another_user.sql
REM*
REM*  Ten skrypt generuje  polecenia konieczne w celu
REM*  tymczasowego przejcia konta innego uytkownika.
REM*
REM*  Skrypt musi by uruchomiony z konta DBA.
REM*
REM*  Zmienna wejciowa: nazwa uytkownika przejmowanego konta. 
REM*
REM*  Etapy 1, 2, oraz 3: wykonaj zapytanie na perspektywie DBA_USERS. 
REM*  Wygeneruj polecenie ALTER USER, ktre bdzie konieczne do
REM*  ponownego ustawienia hasa na jego biec warto. 
REM*
set pagesize 0 feedback off verify off echo off termout off
REM*
REM*  Utwrz plik o nazwie reset.sql do to przechowania wygenerowanych 
REM*  polece.
REM*
spool reset.sql
REM*
REM*  Wybierz zaszyfrowane haso z perspektywy DBA_USERS.
REM*
SELECT 'alter user &&1 identified by values '||''''||
password||''''||';'
FROM dba_users WHERE username = upper('&&1');

prompt 'host rm -f reset.sql'
prompt 'exit'
spool off
exit

alter user MCGREGOR identified by values '1A2DD3CCEE354DFA';
host rm -f reset.sql
exit

alter user MCGREGOR identified by MY_TURN;
connect MCGREGOR/MY_TURN

sqlplus system/manager @reset

create profile temp_profile limit
password_verify_function null
password_reuse_time      unlimited
password_reuse_max       unlimited

audit session;

audit session whenever successful;
audit session whenever not successful;

select
  OS_Username,       /*Nazwa uytkownika systemu operacyjnego.*/
  Username,          /*Nazwa uytkownika konta bazy danych Oracle.*/
  Terminal,                              /*Identyfikator ID uytego terminala.*/
  DECODE(Returncode,'0','Connected',
             '1005','FailedNull',
             '1017','Failed',Returncode),/*Sprawdzenie niepowodzenia*/
  TO_CHAR(Timestamp,'DD-MON-YY HH24:MI:SS'),    /*Czas zalogowania*/
  TO_CHAR(Logoff_Time,'DD-MON-YY HH24:MI:SS')   /*Czas wylogowania */
from DBA_AUDIT_SESSION;

audit role;
noaudit role;

select
      Action,       /*Kod dziaania.*/
      Name          /*Nazwa dziaania taka jak ALTER USER.*/
from AUDIT_ACTIONS;


select
  OS_Username,           /*Nazwa uytkownika systemu operacyjnego.*/
  Username,              /*Nazwa konta uytkownika bazy danych Oracle.*/
  Terminal,              /*Identyfikator ID wykorzystanego terminala.*/      
  Owner,                 /*Waciciel obiektu oddziaywania.*/
  Obj_Name,              /*Nazwa obiektu oddziaywania.*/
  Action_Name,           /*Kod liczbowy dziaania.*/
  DECODE(Returncode,'0','Success',Returncode),/*Sprawdzenie      
                                               niepowodzenia*/
  TO_CHAR(Timestamp,'DD-MON-YY HH24:MI:SS')   /*Znacznik czasu*/
from DBA_AUDIT_OBJECT;

audit insert on THUMPER.EMPLOYEE;
audit all on THUMPER.TIME_CARDS;
audit delete on THUMPER.DEPARTMENT by session;

audit all on SYS.AUD$ by access;

